package novel.manager.service.impl.spider.novel;

import java.util.ArrayList;
import java.util.List;

import novel.manager.pojo.spider.NovelSiteEnum;
import novel.manager.pojo.web.Novel;
import novel.manager.service.utils.NovelSpiderUtil;

import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**笔下文学网站的小说列表爬取*/
public class BxwxNovelSpider extends AbstractNovelSpider {
	public BxwxNovelSpider() {}
	@Override
	//url:小说列表页面
	public List<Novel> getNovels(String url, Integer maxTryTimes) {
		List<Novel> novels = new ArrayList<>();
		try {
			//抓取小说列表并解析tr元素的方法
			Elements trs = super.getsTr(url, maxTryTimes);
			//第0行tr为标题，所以从第1行tr开始
			for (int index = 1, size = trs.size(); index < size; index++) {
				Element tr = trs.get(index);
				//获取tr里的td
				Elements tds = tr.getElementsByTag("td");
				//新建一本小说
				Novel novel = new Novel();
				//获取第一个元素的文本并设置为小说名称
				novel.setName(tds.first().text());
				/**1、.htm与.html没有本质上的区别，表示的是同一种文件，只是适用于不同的环境之下。
				　　2、DOS仅能识别8+3的文件名，所以*.htm的命名方法可以被DOS识别，而*.html的文件命名方式不能被之识别。
				　　3、在UNIX系统中，网页必须使用.html扩展名，如果是htm，在浏览器中打开时则出现源代码；Windows中支持两种扩展名。也可以说，htm和html是Windows和UNIX对抗的产物。
				　　4、如果在网页中同时存在index.html与index.htm，这是浏览器将先解释index.html。*/
				//<td class="odd"><a href="http://www.bxwx9.org/binfo/193/193450.htm">火影之最强木遁</a></td>
				//<td class="even"><a href="http://www.bxwx9.org/b/193/193450/index.html" target="_blank"> 第338章 不容小觑</a></td>
				//获取第一个元素的链接并进行修改：把.htm改为/，尝试过是默认访问这个目录下的index.html，所以也可直接修改为显式的路径
				//把binfo改为b
				String novelUrl = tds.first().getElementsByTag("a").first().absUrl("href").replace(".htm", "/").replace("/binfo/", "/b/");
				//小说的章节列表链接
				novel.setUrl(novelUrl);
				//小说的最新章节名称
				novel.setLastUpdateChapter(tds.get(1).text());
				//小说的最新章节链接
				novel.setLastUpdateChapterUrl(tds.get(1).getElementsByTag("a").first().absUrl("href"));
				//小说的作者
				novel.setAuthor(tds.get(2).text());
				//小说的最近更新日期
				novel.setLastUpdateTime(NovelSpiderUtil.getDate(tds.get(4).text(), "yy-MM-dd"));//2016-10-14 yyyy-MM-dd
				//小说的状态
				novel.setStatus(NovelSpiderUtil.getNovelStatus(tds.get(5).text()));
				//小说的平台id
				novel.setPlatformId(NovelSiteEnum.getEnumByUrl(url).getId());
				//添加到集合中
				novels.add(novel);
			}		
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		//返回小说集合
		return novels;
	}
}
